home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-09-14 | 1.2 KB | 70 lines | [TEXT/MPS ] |
- /* This is test.g which tests multiple scanners/parsers; DLG-based scanner */
- <<
- #include "Lexer.h"
- typedef ANTLRCommonToken ANTLRToken;
-
- main()
- {
- ANTLRToken aToken;
- DLGFileInput in(stdin);
- Lexer scan(&in,2000);
- scan.setToken(&aToken);
- ANTLRTokenBuffer pipe(&scan);
- Include parser(&pipe);
- parser.init();
-
- parser.input();
- }
- >>
-
- #token "[\ \t\n]+" <<skip();>>
- #token Eof "@"
-
- class Include {
-
- <<
- /* this is automatically defined to be a member function of Include::
- * since it is within the "class {...}" boundaries.
- */
- private:
- char *stripquotes(ANTLRChar *s)
- {
- s[strlen(s)-1] = '\0';
- return &s[1];
- }
- >>
-
- input
- : ( cmd | include )* Eof
- ;
-
- cmd : "print"
- ( NUMBER <<printf("%s\n", $1->getText());>>
- | STRING <<printf("%s\n", $1->getText());>>
- )
- ;
-
- include
- : "#include" STRING
- <<{
- FILE *f;
- f = fopen(stripquotes($2->getText()), "r");
- if ( f==NULL ) {fprintf(stderr, "can't open %s\n", $2->getText()+1);}
- else {
- ANTLRToken aToken;
- DLGFileInput in(f);
- Lexer scan(&in,2000);
- scan.setToken(&aToken);
- ANTLRTokenBuffer pipe(&scan);
- Include parser(&pipe);
- parser.init();
- parser.input();
- }
- }>>
- ;
-
- }
-
- #token STRING "\" [a-zA-Z0-9_.,\ \t]+ \""
- #token NUMBER "[0-9]+"
-